Financial Analysis of Grab Holdings
A report prepared by Wu Tsz Kiu



In this financial analysis, we evaluate the financial performance and position of Grab Holdings. The objectives of our financial analysis are to understand the financial health of Grab Holdings, identify potential issues or opportunities, and facilitate the decision-making process. We assess the financial position, profitability, efficiency, liquidity and solvency. We compare Grab Holdings to industry peers or to the overall market. Due to that data as of December 2022 is not yet available, our analysis is limited to the years 2019-2021.
Introduction
Grab Holdings Inc., is a Singaporean multinational technology company. It was founded in 2012 in Malaysia.

Grab Holdings provides its users with transportation, fod delivery and digital payments services through its mobile app. The company operates in many Asian countries and has a diverse workforce of over 6,000 employees worldwide.

Grab Holdings' mission is to drive Southeast Asia forward by creating economic empowerement for everyone.

Grab Holdings is committed to responsible business practices, including environmental sustainability, social responsibility and strong corporate governance.

On December 2nd 2021, the Southeast Asian ride-hailing and online food delivery company, Grab Holdings, made its initial public offering (IPO) debut on the Nasdaq stock exchange. The event marked a significant milestone in the company's history, as it became publicly traded and accessible to a wider range of investors. The IPO was eagerly anticipated by the financial community, as Grab Holdings is one of the largest and fastest-growing tech companies in Southeast Asia. The listing on Nasdaq was expected to provide Grab Holdings with increased liquidity, greater visibility, and improved access to capital, enabling it to further grow its business and achieve its long-term goals. The question is, did it?

1. Analysis of the financial position

Part 1. How strong is the financial position? (balance sheet analysis)

Review the main sources of financing and uses of financing. Which are the main investments and the main sources of financing? How do current assets match with current liabilities? Which sources of financing are used to undertake long-term investment projects? For this part, compare: a) long-term assets to long-term liabilities & shareholders’ equity, and b) property, plant and equipment (PPE) to long-term debt (LTD). In your opinion, is the mixture of long-term liabilities & shareholders’ equity appropriate given the nature of corporate assets (e.g., tangible and intangible assets) and the level of cash flow predictability (e.g., highly/less certain cash flows in less/more cyclical industries). Compare to selected peers.

1.1 Main sources of financing
In [1]:
# Setup
import pandas as pd
import plotly.graph_objects as go

# Create a dictionary with the data
data={'Year':[2019,2020,2021],'Grab Holdings':[0.451,0.375,0.254],
      'Gojek':[0.655,0.447,0.826]}

# Create the dataframe
df = pd.DataFrame(data) 

# Create the figure
fig=go.Figure()

# Add traces
fig.add_trace(go.Bar(x=df['Year'], y=df['Grab Holdings'], name='Grab Holdings',
                     marker_color="darkGreen"))
fig.add_trace(go.Bar(x=df['Year'], y=df['Gojek'], name='Gojek', marker_color="deepPink"))

# Customize the appearance of the chart
fig.update_layout(title='Comparison of Long-term Assets to Long-term Liabilities and Equity<br>between Grab Holdings and Gojek<b>', 
                  xaxis_title='Year',yaxis_title='Ratio',
                  barmode='group', bargap=0.50,bargroupgap=0.0)
fig.update_traces(width=0.2)
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=14),
                  yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))
fig.update_xaxes(showline=True, linewidth=2, linecolor='black')
fig.update_yaxes(showline=True, linewidth=2, linecolor='black')

# For a white background
fig.update_layout(paper_bgcolor='white', plot_bgcolor='white')

# Display the chart
fig.show()
As illustrated above, Grab Holdings and Gojek have a ratio below 1, which implies that they are financing their current assets, i.e., their operations, with non-current liabilities. This has several implications:

On the one hand, it could indicate that the companies are not generating enough cash from its operations to meet its short-term needs and are relying on external sources of financing which, in turn, may imply that Grab Holdings and Gojek are facing financial difficulties.

On the other hand, this may be a strategic decision, as the companies may be investing in long-term projects that are expected to generate returns in the future. Thus, Grab Holdings and Gojek can have chosen to finance these investments with non-current liabilities and equity to minimize the pressure on their cash flows from operations. While Grab Holdings has a lower ratio than Gojek, they seem to have similar strategies.

1.2 Analysis of capital structure
In [2]:
# Setup
import pandas as pd
import plotly.graph_objects as go

# Create a dictionary with the data
data={'Year':[2020,2021],'Grab Holdings':[0.0353,0.2171],'Gojek':[0.4558,1.893]}

# Create the dataframe
df = pd.DataFrame(data) 

# Create the figure
fig=go.Figure()

# Add traces 
fig.add_trace(go.Bar(x=df['Year'], y=df['Grab Holdings'], name='Grab Holdings',
                     marker_color="darkGreen"))
fig.add_trace(go.Bar(x=df['Year'], y=df['Gojek'], name='Gojek', marker_color="deepPink"))

# Customize the appearance of the chart
fig.update_layout(title='Comparison of PP&E/LTD between Grab Holdings and Gojek', 
                  xaxis_title='Year',yaxis_title='Ratio',
                  barmode='group', bargap=0.50,bargroupgap=0.0)
fig.update_traces(width=0.2)
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=14),
                  yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))

# Display the chart
fig.show()
By dividing PPE by long-term debt, we calculate the company's PPE to debt ratio, which measures the proportion of the company's assets that are financed by long-term debt. A high ratio indicates that a company has a larger proportion of debt in its capital structure and is therefore more leveraged. This can make the company more vulnerable to financial distress if its cash flow or profitability deteriorates. In the two years assesed, (2019 was not assesed due to misleading long term debt for Gojek), we notice that Gojek has a significally higher ratio than Grab Holdings, due to the fact that the company is financed by its equity rather than long term debt.
2. Analysis of profit margins and cost structure
Part 2. Which are the trend in profitability? (Income statement analysis)

Review the main sources of expenses (e.g., large depreciation or interest expenses relative to total sales); do you find the profit margin high/low for the nature of products/serviced sold/offered? Do you find specific trends in the cost structure (e.g., increasing trends in certain expenses)? Compare to selected peers.

2.1 Major sources of expenses
In [3]:
# Setup
import pandas as pd
import plotly.graph_objects as go 
from plotly.subplots import make_subplots 

# Create a dictionary with the data
data = {'Grab Holdings 1': ['Interest', 'SG&A', 'COGS'],
        'Grab Holdings 2': [252.00,116.44,107.41], 'Gojek 1': ['SG&A', 'COGS', 'R&D'],
        'Gojek 2':[402.08,83.24,54.90]}

# Create the dataframe
df=pd.DataFrame(data)

# Create the figure
fig = make_subplots(rows=1, cols=2,subplot_titles=['Grab Holdings','Gojek'],
                    shared_yaxes=True)

# Add traces
fig.add_trace(go.Bar(x=df['Grab Holdings 1'],y=df['Grab Holdings 2'],name='Grab Holdings',
                     marker_color=['darkGreen','seaGreen','lightGreen']),row=1, col=1)
fig.add_trace(go.Bar(x=df['Gojek 1'],y=df['Gojek 2'],name='Gojek',
                     marker_color=['deepPink','hotPink','lightPink']),row=1, col=2)

# Customize the appearance of the chart
fig.update_layout(title='Top Three Expenses in 2021 (% of total sales)')
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=14))

# Display the chart
fig.show()
Key takeaways:

1. Interest is the largest expense for Grab Holdings, which is due to the debt financing in its capital structure. The company issued debt of 8 and 1980 respectively in 2020 and 2021 (refer to cash flow analysis).

2. SG&A is the largest expense for Gojek. In 2020, Whatsapp and Paypal invested in Gojek, which maybe the reason why Gojek had such a high level of SG&A.

3. Gojek is using more equity for financing, which explains why its interest expense is significantly lower than that of Grab Holdings.
2.2 Analysis of profitability
In [4]:
# Setup
import pandas as pd
import plotly.graph_objects as go

# Create a dictionary with the data
data={'Year':[2020,2021],'Grab Holdings':[-556.08,-510.96],'Gojek':[-426.96,-471.61]}

# Create the dataframe
df = pd.DataFrame(data)

# Create the figure
fig=go.Figure()

# Add traces
fig.add_trace(go.Bar(x=df['Year'], y=df['Grab Holdings'], name='Grab Holdings', 
                     marker_color="darkGreen"))
fig.add_trace(go.Bar(x=df['Year'], y=df['Gojek'], name='Gojek', marker_color="deepPink"))

# Customize the appearance of the chart
fig.update_layout(title='Comparison of Profitability between Grab Holdings and Gojek', 
                  xaxis_title='Year',yaxis_title='Profit margin (%)', 
                  barmode='group', bargap=0.50,bargroupgap=0.0)
fig.update_traces(width=0.2)
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=14),
                  yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))

# Display the chart
fig.show()
Key takeaways:

1. In 2019, an abnormal negative revenue is recorded in the Income Statement of Grab Holdings, which makes it not meaningful to compute profit margin for the year. Therefore there are only figures for 2020 and 2021.

2. Both Grab Holdings and Gojek did not do well in 2020 and 2021, as reflected by the negative profit margins in two consecutive years. This shows that the ride-hailing industry in Southeast Asia may not be profitable.

3. Profitability of Grab Holdings is slightly worse than Gojek. However, the gap between the profitability of the two companies is getting narrower. It is anticipated that profitability of Grab Holdings will improve in the future as it went public in 2021.
In [5]:
# Setup
import pandas as pd
import plotly.graph_objects as go

# Create a dictionary with the data
data={'Year':[2019,2020,2021],'COGS':[673,576,725],
      'Depreciation & Amortization':[647,387,345],'R&D':[231,257,356],'SG&A':[583,477,786],
      'Interest':[1056,1490,1701]}

# Create the dataframe
df = pd.DataFrame(data) 

# Create the figure
fig = go.Figure()

# Create a dictionary for line color
color={'COGS':'saddlebrown','Depreciation & Amortization':'orange','R&D':'Green',
       'SG&A':'royalblue','Interest':'red'}

# Add traces
for i in data:
    if i!='Year':
        fig.add_trace(go.Scatter(x=df['Year'],y=df[i],mode='lines+markers',
                                 name=i,marker_color=color[i]))
        
# Customize the appearance of the chart
fig.update_traces(line_width=4,marker_size=10)
fig.update_xaxes(showline=True, linewidth=2, linecolor='black',tickvals=[2019,2020,2021])
fig.update_yaxes(showline=True, linewidth=2, linecolor='black',gridcolor='black')
fig.update_layout(title='Trends of Major Expenses of Grab Holdings', xaxis_title='Year',
                  yaxis_title='In million US dollars') 
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=14),
                  yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))

# For a white background
fig.update_layout(paper_bgcolor='white', plot_bgcolor='white')

# Display the chart
fig.show()
Key takeaways:

1. Besides Depreciation & Amortization, all the other major expenses increase during 2019-2021. This is probably because of the significant decrease in the amount of PP&E during the years.

2. No specific trend in the cost structure could be observed. However, it is highlighted that SG&A surpasses COGS and Depreciation & Amortization to become the second largest expense, which may indicate that Grab Holdings is putting effort in the marketing segment of the business.

3. Grab Holdings should worry about its extremely high interest, which increases the most from 2019 to 2021. This is a signal of the large amount of debt in the company. Grab Holdings may suffer from liquidity or solvency problem if it does not manage its cash flow well.
3. Cash flow analysis
Part 3. Which are the tends in the cash policy? Do you find significant changes in the cash flow components? (Analysis of the cash flow statement)

Examine the cash flow statement. Do you find an addition to the cash balance? Compare the three sections of the cash flow statement. How do cash flows from operations compare to cash flows from investment activities and cash flows from financing activities? Which specific decisions explain changes in the CFI (cash flow from investing) and CFF (cash flows from financing) (e.g., new loans, issuing stocks, buying property, etc.). Compare to selected peers.

3.1 Trends in cash flow components
In [14]:
# Setup
import pandas as pd
import plotly.graph_objects as go

# Create a dictionary with the data
CF = {'Year': ['2021', '2020', '2019'],
      'Net Operating Cash Flow': [-1018, -609, -2053],
      'Net Investing Cash Flow': [-2802, -40, 537],
      'Net Financing Cash Flow': [6691, 1266, 1847]}

# Create the dataframe
grab = pd.DataFrame(CF)

# Create the figure
fig_CF = go.Figure()

# Remove the scrolling bar
fig_CF.update_layout(updatemenus=[])

# Add traces
fig_CF.add_trace(go.Bar(x=grab['Year'], y=grab['Net Operating Cash Flow'], 
                        name='Net Operating Cash Flow', 
                        marker=dict(color=['dimgrey', 'dimgrey', 'dimgrey'])))
fig_CF.add_trace(go.Bar(x=grab['Year'], y=grab['Net Investing Cash Flow'], 
                        name='Net Investing Cash Flow', 
                        marker=dict(color=['deepskyblue', 'deepskyblue', 'deepskyblue'])))
fig_CF.add_trace(go.Bar(x=grab['Year'], y=grab['Net Financing Cash Flow'], 
                        name='Net Financing Cash Flow', 
                        marker=dict(color=['darkgreen', 'darkgreen', 'darkgreen'])))

# Customize the appearance of the chart
fig_CF.update_layout(title='Cash flow statement: Trends over time (In million US dollars)',
                  xaxis_title='Year',
                  yaxis_title='Cash flow components')
fig_CF.update_layout(title_font=dict(size=20),legend_font=dict(size=12),
                     yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))
                                                                                                                            
# For a white background
fig_CF.update_layout(paper_bgcolor='white', plot_bgcolor='white')

# Display the chart
fig_CF.show()
In 2021, the cash flow components of Grab Holdings underwent significant changes. Despite the improvement in the net operating cash flow compared to 2019, it remains negative. This suggests that the company's operations are not generating enough cash to sustain its business activities. This persistent negative net operating cash flow has the potential to affect the long-term financial stability of Grab Holdings.

Therefore, it is crucial to also analyze the net investing cash flow and net financing cash flow components, which offer a comprehensive view of the sources of Grab Holdings' cash inflows and outflows.
3.2 Reasons behind positive net financing cash flow in 2021
In [15]:
# Setup
import pandas as pd

# Create a dictionary with the data
data = {'Year': [2021, 2020, 2019],
        'Change in Capital Stock': [4471, 5, 6],
        'Net Issuance/Reduction of Debt': [1804, -98, -1841],
        'Repayments of Operating Leases Liabilities': [-24, -30, 0],
        'Other Funds': [440, 1389, 0],
        'Net Financing Cash Flow': [6691, 1266, 1847]
        }

# Create the dataframe
CFF = pd.DataFrame(data)

CFF_2021=CFF[CFF['Year'] == 2021]

# Create the figure
fig_CFF= go.Figure()

# Add the first trace with a name
fig_CFF.add_trace(go.Bar(x=CFF_2021['Year'], y=CFF_2021['Change in Capital Stock'], 
                         name='Change in Capital Stock', marker=dict(color=['darkgreen']), 
                         text=['4471'], textposition='auto'))

# Add other traces with a name
fig_CFF.add_trace(go.Bar(x=CFF_2021['Year'], y=CFF_2021['Net Issuance/Reduction of Debt'],
                         name='Net Issuance/Reduction of Debt', 
                         marker=dict(color=['seagreen']), text=['1804'], 
                         textposition='auto'))
fig_CFF.add_trace(go.Bar(x=CFF_2021['Year'], y=CFF_2021['Repayments of Operating Leases Liabilities'], 
                         name='Repayments of Operating Leases Liabilities', 
                         marker=dict(color=['lightgrey'])))
fig_CFF.add_trace(go.Bar(x=CFF_2021['Year'], y=CFF_2021['Other Funds'], 
                         name='Other Funds', marker=dict(color=['darkgrey'])))
fig_CFF.add_trace(go.Bar(x=CFF_2021['Year'], y=CFF_2021['Net Financing Cash Flow'], 
                         name='Net Financing Cash Flow', marker=dict(color=['dimgrey']), 
                         text=['6691'], textposition='auto'))

# Customize the appearance of the chart
fig_CFF.update_layout(title='Sale of Stock and Issuance of Debt largely explain the positive FCF in 2021',
                  xaxis_title='Year',
                  yaxis_title='In million US dollars')
fig_CFF.update_layout(title_font=dict(size=20),legend_font=dict(size=11),
                      yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))

# For a white background
fig_CFF.update_layout(paper_bgcolor='white', plot_bgcolor='white')

# Display the chart
fig_CFF.show()
As previously noted, on December 2nd, 2021, Grab Holdings underwent a transformative event by launching its initial public offering (IPO) on the Nasdaq stock exchange. The sale of shares in the company as part of the IPO represents a substantial factor contributing to the elevated net financing cash flow seen in that year. Additionally, Grab Holdings' decision to secure new debt financing has also had a positive impact on its net figure, compared to previous years, indicating a shift in the company's approach to debt financing.
In [16]:
# Setup
import pandas as pd

# Create a dictionary with the data
data = {'Year': [2021, 2020, 2019],
        'Capital Expenditures': [-85, -40, -140],
        'Net Assets from Acquisitions': [-460, -3, -225],
        'Sale of Fixed Assets & Businesses': [468, 392, 333],
        'Purchase/Sale of Investments': [-2725, -359, 569],
        'Net Investing Cash Flow': [-2802, -40, 537]
        }

# Create the dataframe
CFI = pd.DataFrame(data)

CFI_2021=CFI[CFI['Year'] == 2021]

# Create the figure
fig_CFI= go.Figure()

# Add the first trace with a name
fig_CFI.add_trace(go.Bar(x=CFI_2021['Year'], y=CFI_2021['Capital Expenditures'], 
                         name='Capital Expenditures', marker=dict(color=['#e5f0e3'])))

# Add other traces with a name
fig_CFI.add_trace(go.Bar(x=CFI_2021['Year'], y=CFI_2021['Net Assets from Acquisitions'], 
                         name='Net Assets from Acquisitions', marker=dict(color=['#e5f0e3'])))
fig_CFI.add_trace(go.Bar(x=CFI_2021['Year'], y=CFI_2021['Sale of Fixed Assets & Businesses'], 
                         name='Sale of Assets', marker=dict(color=['#e5f0e3'])))
fig_CFI.add_trace(go.Bar(x=CFI_2021['Year'], y=CFI_2021['Purchase/Sale of Investments'], 
                         name='Purchases/Sale of Investments', marker=dict(color=['darkgreen']),
                         text=['-2725'], textposition='auto'))
fig_CFI.add_trace(go.Bar(x=CFI_2021['Year'], y=CFI_2021['Net Investing Cash Flow'], 
                         name='Net Investing Cash Flow', marker=dict(color=['dimgrey']),
                         text=['-2802'], textposition='auto'))

# Customize the appearance of the chart
fig_CFI.update_layout(title='Purchases of Investments predominantly explains the negative CFI in 2021',
                  xaxis_title='Year',
                  yaxis_title='In million US dollars')
fig_CFI.update_layout(title_font=dict(size=20),legend_font=dict(size=11),
                      yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))

# For a white background
fig_CFI.update_layout(paper_bgcolor='white', plot_bgcolor='white')

# Display the chart
fig_CFI.show()
In 2020, net investing cash flow amounted to -40M\$. In 2021, this figure increased significantly to -2802M\$, demonstrating a substantial use of cash for investment activities. As illustrated above, the increase in the negative net investing cash flow can primarily be attributed to the purchases of investments. This is also partly demonstrated in the balance sheet by an increase in long-term investments from 386M\$ in 2020 to 1255M\$ in 2021.
4. Analysis of the risk factors (liquidity and solvency)
Part 4. Which are the trend in the financial risk indicators? (Liquidity and solvency ratios)

Analyze short-term liquidity and long-term solvency ratios. Are you concerned regarding the short-term and long-term risk profile of this company? Compare to selected peers.

4.1 Comparison of liquidity and solvency between Grab Holdings and Gojek
In [10]:
# Setup
import pandas as pd
import plotly.graph_objects as go

# Create a dictionary with the data
data = {'Year': ['2019', '2020', '2021'],
'Total Current Assets GRAB': [3140, 3755, 8675], 'Total Current Assets GOJEK': [469, 2654, 1146],
'Total Current Liabilities GRAB': [783, 836, 1026], 'Total Current Liabilities GOJEK': [5100, 5764, 12294], 
'Current Ratio GRAB': [3140/783,3755/836,8675/1026], 
'Current Ratio GOJEK': [469/5100,2654/5764,1146/12294]}

# Create the dataframe
df1 = round(pd.DataFrame(data),2)

# Create the figure
fig = go.Figure()

# Add traces
fig.add_trace(go.Scatter(
 x=data['Year'],
 y=data['Current Ratio GRAB'],
 mode='lines+markers', name = 'Grab Holdings', line_color='darkgreen'
))
fig.add_trace(go.Scatter(
 x=data['Year'],
 y=data['Current Ratio GOJEK'],
 mode='lines+markers', name = 'Gojek', line_color='deeppink'
))

# Customize the appearance of the chart
fig.update_layout(title='Current Ratio: Grab Holdings vs. Gojek',
                  xaxis_title='Year',
                  yaxis_title='Current Ratio')
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=14),
                  yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))

# Display the chart
fig.show()
In [11]:
# Setup
import pandas as pd
import plotly.graph_objects as go

# Create a dictionary with the data
data = {'Year': ['2019', '2020', '2021'],"Grab Holdings" : [1.712, 2.025, 0.195],
        'Gojek' : [0.049, 0.089, 0.015]}

# Create the dataframe
df = pd.DataFrame(data)

# Create the figure
fig = go.Figure()

# Add traces
fig.add_trace(go.Bar(x=df['Year'], y=df['Grab Holdings'], name='Grab Holdings', 
                     marker_color="darkGreen"))
fig.add_trace(go.Bar(x=df['Year'], y=df['Gojek'], name='Gojek', marker_color="deepPink"))

# Customize the appearance of the chart
fig.update_xaxes(showline=True, linewidth=2, linecolor='black')
fig.update_yaxes(showline=True, linewidth=2, linecolor='black',gridcolor='black')
fig.update_layout(title='Comparison of Debt to Asset Solvency Ratios of Two Companies<br>Over Three Years',
                  xaxis_title='Year',
                  yaxis_title='Debt to Asset Solvency Ratio')
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=14),
                     yaxis_title_font=dict(size=16),xaxis_title_font=dict(size=16))

# For a white background
fig.update_layout(paper_bgcolor='white', plot_bgcolor='white')

# Display the chart
fig.show()
5. The shareholder's perspective: Drivers of profitability
Part 5. Do you find significant changes in the drivers of profitability? (Return on equity and its components – ratio decomposition)

Analyze the return on equity and changes in this ratio over time. Which is the driver of profitability (return on assets or the use of leverage)? How return on assets behave over time? How changes in profit margins and asset turnover relate to its level and trends? Compare to selected peers.

5.1 Ratio analysis between Grab Holdings and Gojek
In [23]:
# Setup
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Create a dictionary with the data
data = {
'Category': ['Return on Equity', 'Return on Assets', 'Equity Multiplier', 'Profit Margin', 'Asset Turnover'],
'Grab 2021': [-0.5171, -0.415, 12.46, -5.1096, 0.08],
'Gojek 2021': [-0.2667, -0.2309, 1.15, -4.7161, 0.05]
}

# Create the dataframe
df = pd.DataFrame(data)

ROE = df[df['Category'] == 'Return on Equity']
ROA = df[df['Category'] == 'Return on Assets']
EquityM = df[df['Category'] == 'Equity Multiplier']
ProfitM = df[df['Category'] == 'Profit Margin']
AssetTurn = df[df['Category'] == 'Asset Turnover']

# Create the figure
fig = make_subplots(rows=1, cols=5, start_cell="top-left")

# Add traces
fig.add_trace(go.Bar(x=['Grab<br>Holdings', 'Gojek'], y=[ROE['Grab 2021'].values[0], 
                                                         ROE['Gojek 2021'].values[0]], 
                     name='ROE'), row=1, col=1)
fig.add_trace(go.Bar(x=['Grab<br>Holdings', 'Gojek'], y=[ROA['Grab 2021'].values[0], 
                                                         ROA['Gojek 2021'].values[0]], 
                     name='ROA'), row=1, col=2)
fig.add_trace(go.Bar(x=['Grab<br>Holdings', 'Gojek'], y=[EquityM['Grab 2021'].values[0],
                                                         EquityM['Gojek 2021'].values[0]], 
                     name='Equity Multiplier'), row=1, col=3)
fig.add_trace(go.Bar(x=['Grab<br>Holdings', 'Gojek'], y=[ProfitM['Grab 2021'].values[0],
                                                         ProfitM['Gojek 2021'].values[0]], 
                     name='Profit Margin'), row=1, col=4)
fig.add_trace(go.Bar(x=['Grab<br>Holdings', 'Gojek'], y=[AssetTurn['Grab 2021'].values[0],
                                                         AssetTurn['Gojek 2021'].values[0]],
                     name='Asset Turnover'), row=1, col=5)


# Customize the appearance of the chart
fig.update_layout(title='Comparison of Ratios between Grab Holdings and Gojek in 2021',
 yaxis_title='Ratio')
fig.update_layout(title_font=dict(size=20),legend_font=dict(size=11),
                  yaxis_title_font=dict(size=16),)

# For a white background
fig.update_layout(paper_bgcolor='white', plot_bgcolor='white')

# Display the chart
fig.show()
Key takeaways:

1. Negative ROE due to negative net income

2. Negative ROA means that Grab Holdings cannot use its assets to generate income
  • Gojek is also unable to use it assets to generate income, but it has a less negative net income than Grab Holdings

  • 3. High Equity Multiplier means that Grab Holdings is relying heavily on financing from debt
  • Gojek has a lower equity multiplier, indicating that it is using more equity and less debt for financing

  • 4. Negative profit margins → deepdive into income statement to find out why negative income
  • Negative margin due to high interest expense which forms the bulk of its expenses

  • 5. Low asset turnover means that Grab Holdings is not effectively using its assets to generate revenue
  • Similarly, Gojek is not effectively using its assets to generate revenue